home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / array.zip / ARRAY.BAS
BASIC Source File  |  1989-07-29  |  11KB  |  337 lines

  1. 1 CLS
  2. 10 PRINT"THIS PROGRAM IS USED TO FIGURE ARRAY CHARACTERISTICS AND FIELD INTENSITY"
  3. 20 PRINT"RATIOS FOR MULTI ANTENNA DIRECTIONAL ARRAYS."
  4. 30 LOCATE 5,1:PRINT"WRITTEN BY DAVID MATHEWS CHIEF ENGINEER, WMNI RADIO COL. OHIO"
  5. 40 PRINT:PRINT"IT IS NOT INTENDED TO BE USED FOR GETTING INFORMATION TO SUBMIT TO"
  6. 50 PRINT"THE FEDERAL COMMUNICATIONS COMMISSION (FCC) AND CAN'T BE USED FOR THAT "
  7. 60 PRINT"PURPOSE. IT IS HOWEVER A LOT OF FUN TO USE AND CAN BE VERY ENLIGHTENING."
  8. 70 PRINT:PRINT"PROGRAM REQUIREMENTS ARE 1) 640K OF MEMORY  2) CGA BOARD OR CGA SIMULATOR"
  9. 80 LOCATE 24,1:INPUT"HIT ENTER TO BEGIN";ZZ$
  10. 90 'INPUT DATA HERE
  11. 100 CLS
  12. 110 DIM F(6),P(6),S(6),D(6),H(6),BV(6),DD(6),SS(6),PP(6),S1(6),E$(10),SS$(6),DD$(6)
  13. 120 DIM Q(1440):PI=3.141593
  14. 130 Z1=57.2958
  15. 160 REM ** SET UP FUNCTION KEYS **
  16. 170 KEY 1,"FIELD"+CHR$(13)
  17. 180 KEY 2,"PHASE"+CHR$(13)
  18. 190 KEY 3,"SPACING"+CHR$(13)
  19. 200 KEY 4,"ORIENT"+CHR$(13)
  20. 210 KEY 5,"STEP"+CHR$(13)
  21. 220 KEY 6,"REMOVE"+CHR$(13)
  22. 230 KEY 7,"ADD"+CHR$(13)
  23. 240 KEY 8,"K FACT"+CHR$(13)
  24. 250 KEY 9,"NONE"+CHR$(13)
  25. 260 E$(1)="BR1R1NR1U6G1BD5BR3"
  26. 270 E$(2)="BR1NR3E3U2H1L1G1BD5BR3"
  27. 280 E$(3)="BR1BU1F1R1E1U1H1NL1E1U1H1L1G1BD5BR3"
  28. 290 E$(4)="BR4U6G2D1R3BD3"
  29. 300 E$(5)="BE1F1R1E1U1H1L1H1U2R3BD6"
  30. 310 E$(6)="BE4BU2L2G1D4F1R1E1U1H1L2BD3BR3"
  31. 320 E$(7)="BR1U2E3U1L3BD6BR3"
  32. 330 E$(8)="BE1F1R1E1U1H1L1H1U1E1R1F1D1G1L1G1D1BD1BR3"
  33. 340 E$(9)="BR1R2E1U4H1L1G1D1F1R2BD3"
  34. 350 E$(0)="BE1F1R1E1U4H1L1G1D3NE3D1BD1BR3"
  35. 360 SLA$="BR2U1E4U1BD6BR3"
  36. 370 DG$="BE3E1U1H1L1G1D1F1R1BD3BR2"
  37. 380 DOT$="BR1L1"
  38. 381 INPUT "DO YOU WANT TO LOAD A SAVED SET OF ARRAY VARIABLES? Y/N";Z$
  39. 382 IF Z$="Y" OR Z$="y" THEN 3355
  40. 385 INPUT"ENTER NAME OF STATION ";STNAME$
  41. 390 INPUT"ENTER FREQUENCY IN KHz   ";KHZ
  42. 400 INPUT"ENTER POWER IN KWs       ";KWS
  43. 401 INPUT"ENTER # OF TOWERS        ";TOWERS:IF TOWERS<2 THEN PRINT"YOU HAVE TO HAVE MORE THAN 1 TOWER OR IT ISN'T AN ARRAY.":GOTO 401
  44. 410 FOR T=1 TO TOWERS
  45. 420 CLS
  46. 430 PRINT"TOWER #";T:PRINT STRING$(70,"-")
  47. 440 PRINT "FIELD        ";
  48. 450 INPUT F(T)
  49. 460 PRINT"PHASE         ";
  50. 470 INPUT P(T):PP(T)=P(T)
  51. 480 PRINT"SPACING       ";
  52. 490 INPUT S(T):SS(T)=S(T):SS$(T)=STR$(SS(T))
  53. 500 PRINT"ORIENTATION   ";
  54. 510 INPUT D(T):DD(T)=D(T):DD$(T)=STR$(DD(T))
  55. 520 PRINT"HEIGHT        ";
  56. 530 INPUT H(T)
  57. 540 IF H(T)=0 THEN PRINT"YOU CAN'T HAVE A 0 DEG. TOWER. TRY AGAIN":GOTO 520
  58. 550 PRINT STRING$(70,"-")
  59. 560 NEXT T
  60. 580 FOR T=1 TO TOWERS
  61. 590 P(T)=P(T)/Z1:S(T)=S(T)/Z1:D(T)=D(T)/Z1
  62. 600 NEXT T
  63. 610 CLS
  64. 620 C=2:REM INITIAL SETTING OF STEP RANGE =2
  65. 630 K1=1
  66. 640 GOSUB 1400
  67. 650 FA$="####":FB$="#####.#":FC$="###.###"
  68. 660 '
  69. 670 'START MAIN PROGRAM HERE
  70. 680 R=0
  71. 690 M1=TOWERS
  72. 700 FOR AO=0 TO 90 STEP C
  73. 710 A1=AO/Z1
  74. 720 A2=(AO+90)/Z1
  75. 730 A3=(AO+180)/Z1
  76. 740 A4=(AO+270)/Z1
  77. 750 X=0:Y=0
  78. 760 FOR L%=1 TO M1
  79. 770 S1=S(L%)*COS(A1-D(L%))
  80. 780 B=S1+P(L%)
  81. 790 X=F(L%)*COS(B)+X
  82. 800 Y=F(L%)*COS(B)+Y
  83. 810 NEXT L%
  84. 820 E1=K1*SQR(X*X+Y*Y)
  85. 830 X=0:Y=0
  86. 840 FOR L%=1 TO M1
  87. 850 S2=S(L%)*COS(A2-D(L%))
  88. 860 B=S2+P(L%)
  89. 870 X=F(L%)*COS(B)+X
  90. 880 Y=F(L%)*COS(B)+Y
  91. 890 NEXT L%
  92. 900 E2=K1*SQR(X*X+Y*Y)
  93. 910 X=0:Y=0
  94. 920 FOR L%=1 TO M1
  95. 930 S3=S(L%)*COS(A3-D(L%))
  96. 940 B=S3+P(L%)
  97. 950 X=F(L%)*COS(B)+X
  98. 960 Y=F(L%)*COS(B)+Y
  99. 970 NEXT L%
  100. 980 E3=K1*SQR(X*X+Y*Y)
  101. 990 X=0:Y=0
  102. 1000 FOR L%=1 TO M1
  103. 1010 S4=S(L%)*COS(A4-D(L%))
  104. 1020 B=S4+P(L%)
  105. 1030 X=F(L%)*COS(B)+X
  106. 1040 Y=F(L%)*COS(B)+Y
  107. 1050 NEXT L%
  108. 1060 E4=K1*SQR(X*X+Y*Y)
  109. 1070 X=0:Y=0
  110. 1080 Q(R)=E1:Q(R+90)=E2:Q(R+180)=E3:Q(R+270)=E4
  111. 1090 R=R+C
  112. 1100 NEXT AO
  113. 1110 GOSUB 1800
  114. 1150 INPUT"DO YOU WANT A COMPLETE PRINT OUT OF DATA ";ZX$
  115. 1160 IF ZX$="Y" OR ZX$="y" THEN 1170 ELSE 1380
  116. 1170 REM ADD A CHR$(12) HERE FOR A FORM FEED AT BEGINNING OF PRINTOUT
  117. 1180 LPRINT TAB(20);"FIELD";TAB(30);"PHASE";TAB(40);"SPACING";TAB(50);"ORIENT";TAB(60);"HEIGHT"
  118. 1190 FOR T=1 TO TOWERS
  119. 1200 LPRINT "TOWER #";T;TAB(20);F(T);TAB(30);PP(T);TAB(40);SS(T);TAB(50);DD(T);TAB(60);H(T)
  120. 1210 NEXT T
  121. 1220 LPRINT:LPRINT:LPRINT
  122. 1230 LPRINT"THEORETICAL HORIZONTAL PATTERN AT ONE MILE."
  123. 1240 LPRINT:LPRINT:LPRINT
  124. 1250 LPRINT"AZ.";TAB(10);"MV/M";TAB(20);"AZ.";TAB(30);"MV/M";TAB(40);"AZ.";TAB(50);"MV/M";TAB(60);"AZ.";TAB(70);"MV/M"
  125. 1260 LPRINT STRING$(79,"-")
  126. 1270 R=0:P=0
  127. 1280 LPRINT USING"###";P;:LPRINT TAB(10);USING"###.###";Q(R);:PRINT USING"###";P;:PRINT TAB(10);USING"###.###";Q(R);
  128. 1290 LPRINT TAB(20);USING"###";P+90;:LPRINT TAB(30);USING"###.###";Q(R+90);:PRINT TAB(20);USING"###";P+90;:PRINT TAB(30);USING"###.###";Q(R+90);
  129. 1300 LPRINT TAB(40);USING"###";P+180;:LPRINT TAB(50);USING"###.###";Q(R+180);:PRINT TAB(40);USING"###";P+180;:PRINT TAB(50);USING"###.###";Q(R+180);
  130. 1310 LPRINT TAB(60);USING"###";P+270;:LPRINT TAB(70);USING"###.###";Q(R+270):PRINT TAB(60);USING"###";P+270;:PRINT TAB(70);USING"###.###";Q(R+270)
  131. 1320 R=R+C:P=P+C
  132. 1330 IF R<81 THEN 1280
  133. 1340 GOTO 1360
  134. 1350 STOP
  135. 1360 PRINT:PRINT:INPUT"DO YOU WANT A COMPLETE PRINT OUT?";Z$
  136. 1370 IF Z$="Y" OR Z$="y" THEN 1270
  137. 1380 'CHANGE INFORMATION HERE
  138. 1400 CLS:PRINT"CHANGE INFORMATION FOR WHAT?:"
  139. 1410 GOSUB 1730
  140. 1420 PRINT
  141. 1430 PRINT"F1)  FIELD"
  142. 1440 PRINT"F2)  PHASE"
  143. 1450 PRINT"F3)  SPACING"
  144. 1460 PRINT"F4)  ORIENTATION"
  145. 1470 PRINT"F5)  STEP FACTOR";" <";C;">"
  146. 1471 PRINT"F6)  REMOVE A TOWER"
  147. 1472 PRINT"F7)  ADD A TOWER"
  148. 1480 PRINT"F8)  K FACTOR";" <";K1;">"
  149. 1481 PRINT"F9)  NONE
  150. 1482 PRINT"77)  LOAD NEW PARAMETERS"
  151. 1495 PRINT"88)  SAVE ARRAY SETTINGS"
  152. 1500 PRINT"99)  QUIT"
  153. 1510 PRINT:PRINT:INPUT"SELECT USING FUNCTION KEYS ";N$
  154. 1512 IF N$="77" THEN GOTO 3355
  155. 1515 IF N$="88" THEN GOSUB 3300
  156. 1520 IF N$="REMOVE" THEN GOTO 2780
  157. 1530 IF N$="ADD" THEN GOTO 2850
  158. 1540 IF N$="99" THEN STOP
  159. 1560 IF N$="STEP" THEN INPUT"WHAT IS THE NEW STEP FACTOR";C:CLS:GOTO 1380
  160. 1570 IF N$="K FACT" THEN INPUT"WHAT IS THE NEW K FACTOR";K1:CLS:GOTO 1380
  161. 1580 IF N$="NONE" THEN 660
  162. 1590 IF N$="FIELD" THEN N=1
  163. 1600 IF N$="PHASE" THEN N=2
  164. 1610 IF N$="SPACING" THEN N=3
  165. 1620 IF N$="ORIENT" THEN N=4
  166. 1630 IF N=1 THEN Y$="FIELD" ELSE IF N=2 THEN Y$="PHASE" ELSE IF N=3 THEN Y$="SPACING" ELSE IF N=4 THEN Y$="ORIENTATION"
  167. 1640 INPUT "ON WHICH TOWER? ";M
  168. 1650 PRINT "ENTER NEW ";Y$;" FOR TOWER ";M;:INPUT KL
  169. 1660 IF N=1 THEN F(M)=KL:PG=F(M)
  170. 1670 IF N=2 THEN P(M)=KL:PG=P(M):P(M)=P(M)/Z1:PP(M)=KL
  171. 1680 IF N=3 THEN S(M)=KL:PG=S(M):S(M)=S(M)/Z1:SS(M)=KL:SS$(M)=STR$(KL)
  172. 1690 IF N=4 THEN D(M)=KL:PG=D(M):D(M)=D(M)/Z1:DD(M)=KL:DD$(M)=STR$(KL)
  173. 1700 REM
  174. 1710 CLS:GOTO 1400
  175. 1720 CLS
  176. 1730 REM PRINT ON SCREEN LAST INFORMATION ON TOWERS
  177. 1740 PRINT TAB(20);"FIELD";TAB(30);"PHASE";TAB(40);"SPACING";TAB(50);"ORIENT"
  178. 1750 FOR T=1 TO TOWERS
  179. 1760 IF H(T)=0 THEN 1780
  180. 1770 PRINT "TOWER #";T;TAB(20);F(T);TAB(30);PP(T);TAB(40);SS$(T);TAB(50);DD$(T)
  181. 1780 NEXT T
  182. 1790 RETURN
  183. 1800 REM  PLOT THE PATTERN
  184. 1810  SCREEN 2:CLS
  185. 1820 INPUT"(E)XPANDED SCALE OR (S)TANDARD SCALE";CX$
  186. 1830 LOCATE 1,55:PRINT"K FACTOR= ";K1
  187. 1840 DEF SEG=&HB800:BLOAD"POLAR.BIN",0
  188. 1850 GOSUB 2120
  189. 1860 GOSUB 2460
  190. 1870 LOCATE 12,1:PRINT "1/4 WAVE = ";INT(WL)/4;
  191. 1890 RADIUS=200
  192. 1900 QHI=Q(1):QLO=10000
  193. 1910 FOR HI=0 TO 360 STEP C
  194. 1920 IF Q(HI)>QHI THEN QHI=Q(HI):IQ$=STR$(HI):QHI$=STR$(QHI):QHI$=LEFT$(QHI$,5)
  195. 1930 IF Q(HI)<QLO THEN QLO=Q(HI):II$=STR$(HI):QLO$=STR$(QLO):QLO$=LEFT$(QLO$,5)
  196. 1940 NEXT HI
  197. 1950 QH$=STR$(QHI)
  198. 1960 FOR TY=0 TO 360 STEP C
  199. 1970 RATIO=Q(TY)/QHI
  200. 1980 X1=TY*(PI/180)
  201. 1990 X=SIN(X1)*RATIO
  202. 2000 Y=COS(X1)*RATIO
  203. 2010 Y=100-((Y*.42)*150)
  204. 2020 X=420+(X*150)
  205. 2030 IF FIRST=0 THEN X3=X:Y3=Y:FIRST=1
  206. 2040 PSET (X,Y):LINE (X3,Y3)-(X,Y):X3=X:Y3=Y
  207. 2050 NEXT TY
  208. 2052 LOCATE 2,66:PRINT"LO=";INT(QLO);"/";II$
  209. 2053 LOCATE 1,66:PRINT"HI=";INT(QHI);"/";IQ$
  210. 2060 IF CX$="E" OR CX$="e" THEN GOSUB 3060
  211. 2065 LOCATE 24,70:PRINT "HIT ANY KEY";
  212. 2066 I$=INKEY$:IF I$="" THEN 2066
  213. 2070 FIRST=0
  214. 2110 SCREEN 0:RETURN
  215. 2120 REM PUT PARAMETERS ON THE SCREEN
  216. 2130 B=5
  217. 2140 LOCATE 1,2:PRINT"PARAMETERS:";
  218. 2150 LOCATE 2,2:PRINT"FREQ. ";KHZ;"KHz";
  219. 2160 LOCATE 3,2:PRINT"POWER ";KWS;"KW";
  220. 2170 LOCATE 4,2
  221. 2180 PRINT"   FIELD  PHASE";
  222. 2190 LOCATE B,2
  223. 2200 FOR T=1 TO TOWERS
  224. 2210 IF H(T)=0 THEN 2250
  225. 2220 PRINT T;TAB(5);F(T);TAB(11);PP(T);
  226. 2230 B=B+1
  227. 2240 LOCATE B,2
  228. 2250 NEXT T
  229. 2260 RETURN
  230. 2460 LODIS=0
  231. 2470 FOR YT=1 TO TOWERS
  232. 2480 IF SS(YT)>LODIS THEN LODIS=SS(YT)
  233. 2490 NEXT YT
  234. 250